package singleton;

/**
 * 创建时间：2018年03月13日9:52 <br>
 * 作者：fuchaoyang <br>
 * 描述：创建enum时，编译器会自动为我们生成一个继承自java.lang.Enum的类
 * class EnumInfo extends Enum{
 * public static final Type EnumSingleTon;
 * ...
 * }
 * enum的构造方法限制是private的，也就是不允许我们调用。
 * 我们可以把EnumSingleTon看做一个类，而把成员A,B,C,D看做一个实例
 */

public class EnumDemo {

  public void fun() {

    EnumInfo info = EnumInfo.A;
    int type = EnumInfo.A.getType();
    // A内部重载了getValue方法
    String value = info.getValue();
    int typeC = EnumInfo.C.getType();
  }

  public enum EnumInfo {
    // Enum2.A时执行构造方法，赋值(1,"A")
    A(1, "A") {
      /**
       * A实例后面的{…}就是属于A的实例方法，可以通过复写原本的方法
       * @return
       */
      @Override public String getValue() {
        return super.getValue();
      }
    }, B(2, "B"), C;

    private int type;
    private String value;

    EnumInfo(int type, String value) {
      this.type = type;
      this.value = value;
    }

    // 可以有多个构造方法
    EnumInfo() {
    }

    public int getType() {
      return type;
    }

    public String getValue() {
      return value;
    }

    // 除此之外，我们还可以添加抽象方法在enum中，强制ABCD都实现各自的处理逻辑
    //public abstract String getType2();
  }
}
